Итак, дошла очередь и до WMF. Что эа такое WMF файлы ? Работая с графикой рано или позно у Вас возникнет задача в передаче информации от одной программы к другой. Существует большое количество стандартов, например, DXF. Для его использования необходимо тщательно изучить стандарт и реализовать его поддержку. Существуют и другие стандарты. Но изучение стандартов это дела долгое. Что делать еcли надо, чтобы ваша программа могла быстро и с наименьшими трудностями для Вас сохранить данные. Для этого нужно воспользоваться стандартом Windows - WMF. На Ваш вопрос о том, чем он отличается от DXF, например, я могу сказать, что стандарта WMF практически нет :-)). То есть так же как вы рисуете с помощью GDI теми же командами и пишите в WMF файл. Информация в файле будет векторная. WMF - это список структур, которые содержат информацию о вызове GDI функций. Ладно на примере думаю будет понятно :-)
Создаем приложение как MFC AppWizard с именем WmfTest, как SDI и нажимаем Finish. Теперь создадим функцию рисования в OnDraw.
/////////////////////////////////////////////////////
// CWmfTestView drawing
void CWmfTestView::OnDraw(CDC* pDC)
{
CWmfTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CPen pen(PS_SOLID,4,RGB(255,0,0));
pDC->SelectObject(pen);
pDC->Ellipse(CRect(10,10,100,100));
pDC->Rectangle(CRect(150,150,300,300));
}
Запустим программу и посмотрим.

Для записи в WMF файл создадим функцию реакции на нажатие левой кнопки мыши в окне. То есть нажали кнопку мыши информация в WMF файл записалась.
///////////////////////////////////////////////////////
// CWmfTestView message handlers
void CWmfTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
HDC MetaDC;
MetaDC=CreateMetaFile("test.wmf");
if (MetaDC!=NULL)
{
CPen pen(PS_SOLID,4,RGB(255,0,0));
SelectObject(MetaDC,pen);
Ellipse(MetaDC,10,10,100,100);
Rectangle(MetaDC,150,150,300,300);
}
CloseMetaFile(MetaDC);
CView::OnLButtonDown(nFlags, point);
}
Смотрите, создаем контекст метафайла HDC MetaDC, после этого сам метафайл CreateMetaFile("test.wmf") и теперь мы используя контекст метафайла и функции GDI из API !!! спокойно в этот контекст пишем. В конце закрываем метафайл. Готов !.
А теперь проверяем. Запустите приложение. Щелкните левой кнопкой. И экспортируйте файл test.wmf в Corel Draw 8.0. Рисунок будет маленький. Увеличьте его. Разгруппируйте Ungroup. Щелкните в стороне. Теперь это два векторных объекта. На рисунке ниже я специально переместил один узел, чтобы это показать.
